package com.ipt.frm.pw;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class Ficheros
 */
public class Ficheros extends ServletMaestro {

	private static final long serialVersionUID = 201506065079628204L;
	private static String nombreArchivo = null;
	private static String nombreUser = null;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Ficheros() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	@Override
	@SuppressWarnings("unchecked")
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		// String nombreUser = obtenerNombre(request);

		try {
			// Proceso de la libreria commons.fileupload para obtener el archivo
			// enviado al servidor
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
			List items = servletFileUpload.parseRequest(request);
			DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
			diskFileItemFactory.setSizeThreshold(81920); // bytes

			File repositoryPath = new File("/temp");
			diskFileItemFactory.setRepository(repositoryPath);

			servletFileUpload.setSizeMax(81920); // bytes

			Iterator it = items.iterator();
			while (it.hasNext()) {
				FileItem fileItem = (FileItem) it.next();
				if (fileItem.isFormField()) {
					String nombre = fileItem.getString();
					request.setAttribute("nombre", nombre);
				} else {
					subirFichero(fileItem);
					request.setAttribute("nombreArchivo", nombreArchivo);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		RequestDispatcher dispacher = this.getServletContext()
				.getRequestDispatcher("/mostrarDatos.jsp");
		dispacher.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// puenteado las peticiones POST a doGet
		doGet(request, response);
	}

	protected String obtenerNombre(HttpServletRequest request) {
		String nombre = null;
		try {
			// Proceso de la libreria commons.fileupload para obtener el archivo
			// enviado al servidor
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
			List itemsNombre = servletFileUpload.parseRequest(request);

			Iterator itNombre = itemsNombre.iterator();
			while (itNombre.hasNext()) {
				FileItem fileItemNombre = (FileItem) itNombre.next();
				if (fileItemNombre.isFormField()) {
					nombre = fileItemNombre.getString();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return nombre;
	}

	protected void subirFichero(FileItem fileItem) {
		String nombreCampo = fileItem.getFieldName();
		long tamanioArchivo = fileItem.getSize();
		nombreArchivo = fileItem.getName();

		String contentType = fileItem.getContentType();

		File folder = new File("/WebContent/ficherosServidor/" + nombreUser);

		if (!folder.exists()) {
			folder.mkdir();
		}

		// Guardo archivo del cliente en servidor
		// File archivo = new File(
		// "C:\\Desarrollo\\tomcat\\webapps\\PruebasWeb2.5\\WebContent\\ficherosServidor\\"
		// + nombreUser + "\\" + nombreArchivo);
		File archivo = new File(
				"C:\\Desarrollo\\tomcat\\webapps\\PruebasWeb2.5\\ficherosServidor\\"
						+ nombreArchivo);
		try {
			fileItem.write(archivo);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
